20. 解决方案:最后的检测

解决方案

  1. 为每个 销售代表 对应的 区域 以及相关的 客户 创建一个表格,这次仅针对 Midwest 区域。最终表格应该包含三列:区域 名称 、销售代表 姓名 ,以及客户 名称 。根据客户名称按字母顺序 (A-Z) 排序。
SELECT r.name region, s.name rep, a.name account
FROM sales_reps s
JOIN region r
ON s.region_id = r.id
JOIN accounts a
ON a.sales_rep_id = s.id
WHERE r.name = 'Midwest'
ORDER BY a.name;
  1. 为每个 销售代表 对应的 区域 以及相关的 客户 创建一个表格,这次仅针对 Midwest 区域,并且销售代表的名字以 S 开头。最终表格应该包含三列:区域 名称 、销售代表 姓名 ,以及客户 名称 。根据客户名称按字母顺序 (A-Z) 排序。
SELECT r.name region, s.name rep, a.name account
FROM sales_reps s
JOIN region r
ON s.region_id = r.id
JOIN accounts a
ON a.sales_rep_id = s.id
WHERE r.name = 'Midwest' AND s.name LIKE 'S%'
ORDER BY a.name;
  1. 为每个 销售代表 对应的 区域 以及相关的 客户 创建一个表格,这次仅针对 Midwest 区域,并且销售代表的姓以 K 开头。最终表格应该包含三列:区域 名称 、销售代表 姓名 ,以及客户 名称 。根据客户名称按字母顺序 (A-Z) 排序。
SELECT r.name region, s.name rep, a.name account
FROM sales_reps s
JOIN region r
ON s.region_id = r.id
JOIN accounts a
ON a.sales_rep_id = s.id
WHERE r.name = 'Midwest' AND s.name LIKE '% K%'
ORDER BY a.name;
  1. 提供每个 订单 的每个区域的 名称 ,以及客户 名称 和所支付的 单价 (total_amt_usd/total)。但是,只针对 标准订单数量 超过 100 的情况提供结果。最终表格应该包含三列: 区域名称 客户名称 单价 。为了避免除以 0 个订单,这里可以在分母上加上 0.01,即:(total_amt_usd/(total+0.01))。
SELECT r.name region, a.name account, o.total_amt_usd/(o.total + 0.01) unit_price
FROM region r
JOIN sales_reps s
ON s.region_id = r.id
JOIN accounts a
ON a.sales_rep_id = s.id
JOIN orders o
ON o.account_id = a.id
WHERE o.standard_qty > 100;
  1. 提供每个 订单 的每个区域的 名称 ,以及客户 名称 和所支付的 单价 (total_amt_usd/total)。但是,只针对 标准订单数量 超过 100 广告纸数量 超过 50 的情况提供结果。最终表格应该包含三列: 区域名称 客户名称 单价 。按照最低的 单价 在最之前排序。为了避免除以 0 个订单,这里可以在分母上加上 0.01,即:(total_amt_usd/(total+0.01))。
SELECT r.name region, a.name account, o.total_amt_usd/(o.total + 0.01) unit_price
FROM region r
JOIN sales_reps s
ON s.region_id = r.id
JOIN accounts a
ON a.sales_rep_id = s.id
JOIN orders o
ON o.account_id = a.id
WHERE o.standard_qty > 100 AND o.poster_qty > 50
ORDER BY unit_price;
  1. 提供每个 订单 的每个区域的 名称 ,以及客户 名称 和所支付的 单价 (total_amt_usd/total)。但是,只针对 标准订单数量 超过 100 广告纸数量 超过 50 的情况提供结果。最终表格应该包含三列: 区域名称 客户名称 单价 。按照最高的 单价 在最之前排序。为了避免除以 0 个订单,这里可以在分母上加上 0.01,即:(total_amt_usd/(total+0.01))。
SELECT r.name region, a.name account, o.total_amt_usd/(o.total + 0.01) unit_price
FROM region r
JOIN sales_reps s
ON s.region_id = r.id
JOIN accounts a
ON a.sales_rep_id = s.id
JOIN orders o
ON o.account_id = a.id
WHERE o.standard_qty > 100 AND o.poster_qty > 50
ORDER BY unit_price DESC;
  1. account id 1001 的客户使用了哪些不同的 渠道 。最终表格应该包含 2 列: 客户名称 和不同的 渠道 。你可以尝试使用 SELECT DISTINCT 使结果仅显示唯一的值。
SELECT DISTINCT a.name, w.channel
FROM accounts a
JOIN web_events w
ON a.id = w.account_id
WHERE a.id = '1001';
  1. 找出发生在 2015 年的所有订单。最终表格应该包含 4 列: occurred_at account name order total order total_amt_usd
SELECT w.occurred_at, a.name, o.total, o.total_amt_usd
FROM accounts a
JOIN orders o
ON o.account_id = a.id
JOIN web_events w
ON a.id = w.account_id
WHERE w.occurred_at BETWEEN '01-01-2015' AND '01-01-2016'
ORDER BY w.occurred_at DESC;